﻿#include<iostream>
using namespace std;

int main()
{
	cout << "hello world" << endl;
}

#include <stdio.h>
#include <stdlib.h>
int rand = 10;
int main()
{
	// 编译报错：error c2365: “rand”: 重定义；以前的定义是“函数”
	printf("%d\n", rand);
	return 0;
}

#include <stdio.h>
#include <stdlib.h>
// 1. 正常的命名空间定义
// ikun是命名空间的名字，⼀般开发中是⽤项⽬名字做命名空间名。
namespace ikun
{
	// 命名空间中可以定义变量/函数/类型
	int rand = 10;
	int Add(int left, int right)
	{
		return left + right;
	}
	struct Node
	{
		struct Node* next;
		int val;
	};
}
int main()
{
	// 这⾥默认是访问的是全局的rand函数指针
	printf("%p\n", rand);
	// 这⾥指定ikun命名空间中的rand
	printf("%d\n", ikun::rand);
	return 0;
}

#include <stdio.h>
#include <stdlib.h>
//2. 命名空间可以嵌套
namespace bit
{
ibo
namespace ibo
{
	int rand = 1;
	int Add(int left, int right)
	{
	return left + right;
	}
}

//ikun
namespace ikun
{
	int rand = 2;
	int Add(int left, int right)
	{
		return (left + right) * 10;
	}
}

int main()
{
	printf("%d\n", bit::ibo::rand);
	printf("%d\n", bit::ikun::rand);
	printf("%d\n", bit::ibo::Add(1, 2));
	printf("%d\n", bit::ikun::Add(1, 2));
	return 0;
}
 


	 多⽂件中可以定义同名namespace，他们会默认合并到⼀起，就像同⼀个namespace⼀样
 Stack.h


	 多⽂件中可以定义同名namespace，他们会默认合并到⼀起，就像同⼀个namespace⼀样
 Stack.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<assert.h>
	namespace ikun
	{
		typedef int STDataType;
		typedef struct Stack
		{
				STDataType * a;
			int top;
			int capacity;
		}ST;
		void STInit(ST* ps, int n);
		void STDestroy(ST* ps);
		void STPush(ST* ps, STDataType x);
		void STPop(ST* ps);
		STDataType STTop(ST* ps);
		int STSize(ST* ps);
		bool STEmpty(ST* ps);
	}
	// Stack.cpp

#include"Stack.h"
	namespace ikun
	{
		void STInit(ST* ps, int n)
		{
			assert(ps);
			ps->a = (STDataType*)malloc(n * sizeof(STDataType));
			ps->top = 0;
			ps->capacity = n;
		}
		// 栈顶
		void STPush(ST* ps, STDataType x)
		{
			assert(ps);
			// 满了， 扩容
			if (ps->top == ps->capacity)
			{
				printf("扩容\n");
				int newcapacity = ps->capacity == 0 ? 4 : ps->capacity
					* 2;
				STDataType* tmp = (STDataType*)realloc(ps->a,
					newcapacity * sizeof(STDataType));
				if (tmp == NULL)
				{
					perror("realloc fail");
					return;
				}
					ps->a = tmp;
				ps->capacity = newcapacity;
			}
			ps->a[ps->top] = x;
			ps->top++;
		}
	}

#include<stdio.h>
	namespace N
	{
		int a = 0;
		int b = 1;
	}
	int main()
	{
		// 编译报错：error C2065: “a”: 未声明的标识符
		printf("%d\n", a);
		return 0;
	}
		// 指定命名空间访问
		int main()
	{
		printf("%d\n", N::a);
		return 0;
	}
	// using将命名空间中某个成员展开
	using N::b;
	int main()
	{
		printf("%d\n", N::a);
		printf("%d\n", b);
		return 0;
	}

		// 展开命名空间中全部成员
		using namespce N;
	int main()
	{
		printf("%d\n", a);
		printf("%d\n", b);
		return 0;
	}

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
int main()
{
	int a = 0;
	double b = 0.1;
	char c = 'x';

		cout << a << " " << b << " " << c << endl;
	std::cout << a << " " << b << " " << c << std::endl;
	scanf("%d%lf", &a, &b);
	printf("%d %lf\n", a, b);
	// 可以⾃动识别变量的类型
	cin >> a;
	cin >> b >> c;
	cout << a << endl;
	cout << b << " " << c << endl;
	return 0;
}


